The Advanced Configuration and Power Interface (“ACPI”) specification is an open-industry specification, co-developed by Intel, Microsoft, and Toshiba, that defines an interface to a computer system board that enables the operating system to implement operating-system directed power management and system configuration. By following the ACPI specification, manufacturers can build systems consistent with the “OnNow” design initiative for instantly available computer systems.
ACPI compliant hardware includes features necessary to support operating system power management, such as hard disk spin-down, video power-down, or modem power-off. The interfaces to those features are described using the Description Tables in the ACPI specification. The features of ACPI hardware are controlled through ACPI Software Language (“ASL”) control methods compiled and stored in the system Basic Input/Output System (“BIOS”) or non-volatile Random Access Memory (NVRam). The ASL control methods are typically interpreted and executed by a virtual machine that is embedded in an ACPI driver within the ACPI system. The operating system calls down to the ACPI driver, which accesses the features associated with the ACPI hardware.
Until now, the functionality provided by the ACPI specification has been limited to power management controlled by the operating system. The features made available by ACPI hardware, as well as other features enabled by the ACPI specification, have been accessible only by the operating system because the ACPI driver is a kernel mode driver and, therefore, is not directly accessible by software application programs executing in user mode. As is known in the art, “kernel mode” refers to processing that occurs at the most privileged and protected level of the operating system. Kernel mode software resides in protected memory at all times and provides basic operating system services. “User mode” refers to processing that occurs at the application layer and which does not have general access to kernel mode drivers.
In the past, a developer of a user mode application that desired access to the information and features made possible by ACPI hardware needed to create a private kernel mode driver that was able to interface with the kernel mode ACPI driver, and then provide an interface to that private kernel mode driver from the user mode application. Unfortunately, that solution has the disadvantage of requiring all the developers of user mode applications to develop unique kernel mode drivers to essentially provide private access to the ACPI driver. Moreover, if each user mode application has a corresponding kernel mode driver to perform essentially the same task, the computer system suffers the performance burden of having similar code executing in several disparate drivers all loaded in the kernel. Still another disadvantage of existing technologies is that the user mode interface is inconsistent and nonuniform.
Accordingly, a need exists for a mechanism by which the information and features of ACPI compliant hardware can be exposed to user mode applications without the need to develop private kernel mode drivers for each of several user mode applications.